Linux Swap 空间调整

在 Linux 系统中减少 swap 空间有两种主要场景:

  1. 减少现有的 swap 分区大小(需要调整分区并可能涉及数据迁移)。
  2. 减少现有的 swap 文件大小(更灵活,无需调整分区)。

以下是两种方法的详细步骤。根据你的系统使用的是 swap 分区还是 swap 文件,选择合适的方法。如果不确定,可以先检查当前 swap 配置。


检查当前 Swap 配置

运行以下命令查看当前的 swap 使用情况:

swapon --show

free -h 查看 swap 使用量:

              total        used        free      shared  buff/cache   available
Swap:         2.0Gi       0.0Gi       2.0Gi

方法 1:减少 Swap 文件大小

如果你的 swap 是一个文件(如 /swapfile),减少大小相对简单。

步骤

  1. 关闭当前的 swap 文件

    sudo swapoff /swapfile
    
    • 如果提示设备忙碌,检查占用 swap 的进程:
      sudo lsof | grep swap
      
      然后终止相关进程或重启系统。
  2. 删除旧的 swap 文件

    sudo rm /swapfile
    
  3. 创建新的、更小的 swap 文件(例如从 2GB 减少到 1GB):

    sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
    
    • bs=1M:块大小 1MB。
    • count=1024:块数,1024 * 1MB = 1GB。
  4. 设置文件权限

    sudo chmod 600 /swapfile
    
  5. 格式化为 swap

    sudo mkswap /swapfile
    
  6. 启用新的 swap 文件

    sudo swapon /swapfile
    
  7. 验证

    swapon --show
    free -h
    
    • 预期输出:
      NAME      TYPE  SIZE  USED PRIO
      /swapfile file  1G    0B   -2
      
  8. 确保开机自动挂载(可选):

    • 编辑 /etc/fstab,确保 swap 条目正确:
      sudo nano /etc/fstab
      
      • 检查或添加:
        /swapfile none swap sw 0 0
        
      • 保存并退出。

方法 2:减少 Swap 分区大小

如果你的 swap 是一个分区(如 /dev/sda5),减少大小需要调整分区表,可能涉及数据备份和分区工具(如 gparted)。

步骤

  1. 关闭当前的 swap 分区

    sudo swapoff /dev/sda5
    
    • 替换 /dev/sda5 为你的实际 swap 分区(从 swapon --show 获取)。
  2. 备份数据(如果需要)

    • 如果 swap 分区旁边有其他分区需要调整,确保备份重要数据。
  3. 使用分区工具调整大小

    • 安装 gparted
      sudo apt-get install gparted
      
    • 启动 gparted
      sudo gparted
      
    • 找到 swap 分区(标记为 linux-swap),右键选择“关闭”。
    • 缩小分区大小(例如从 2GB 调整到 1GB)。
    • 应用更改。
  4. 重新格式化为 swap

    • 获取调整后的分区设备名(例如仍为 /dev/sda5):
      sudo mkswap /dev/sda5
      
  5. 启用新的 swap 分区

    sudo swapon /dev/sda5
    
  6. 验证

    swapon --show
    free -h
    
    • 预期输出:
      NAME      TYPE      SIZE  USED PRIO
      /dev/sda5 partition 1G    0B   -2
      
  7. 更新 /etc/fstab

    • 检查 /etc/fstab 中的 swap 条目:
      sudo nano /etc/fstab
      
      • 示例:
        /dev/sda5 none swap sw 0 0
        
      • 确保设备名匹配新分区。

注意事项

  1. Swap 使用中

    • 如果 swap 正在使用,swapoff 可能失败。可以临时增加物理内存使用(例如运行大程序)释放 swap,或者重启系统。
  2. 最小 Swap 大小

    • Swap 太小可能影响系统稳定性,尤其是内存不足时。建议至少保留 512MB 或根据内存大小设置(例如 RAM 的 1/2)。
  3. 分区调整风险

    • 调整分区可能导致数据丢失,建议在调整前备份。
  4. 性能影响

    • 减少 swap 后,如果内存不足,系统可能更频繁地触发 OOM Killer。

示例:从 2GB 减少到 1GB

假设当前是 swap 文件:

# 检查当前大小
swapon --show
# 输出:/swapfile file 2G

# 关闭 swap
sudo swapoff /swapfile

# 删除旧文件
sudo rm /swapfile

# 创建 1GB 新文件
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 验证
swapon --show
# 输出:/swapfile file 1G

删除 Swap(可选)

如果你想完全移除 swap:

sudo swapoff -a
sudo rm /swapfile  # 如果是文件
# 或 sudo mkfs.ext4 /dev/sda5  # 如果是分区,转为其他文件系统
sudo sed -i '/swap/d' /etc/fstab  # 从 fstab 中移除 swap 条目

如果不确定当前是文件还是分区,或者需要更具体指导,请提供 swapon --show 的输出,我会进一步协助你!